home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / asmutil / hdsource.zip / HDSHIP.ASM < prev    next >
Assembly Source File  |  1986-02-24  |  8KB  |  223 lines

  1.      PAGE     64,132            ;PAGE WIDTH,LENGTH
  2.      .SALL
  3.      TITLE     PC/AT HDNOSTIC - LAND THE HEADS
  4. ; **********************************************************************
  5. ; *                                       *
  6. ; *    MODULE NAME    HDSHIP                           *
  7. ; *    AUTHOR           JIM BRACKING                       *
  8. ; *                                       *
  9. ; *    DECSRIPTION    THIS PROGRAM PERFORMS THE FOLLOWING           *
  10. ; *               FUNCTIONS:                       *
  11. ; *                                       *
  12. ; *               1. LAND THE HARD DISK HEADS               *
  13. ; *                                       *
  14. ; **********************************************************************
  15. ;
  16. ; **********************************************************************
  17. ; *            EXTERNAL PROGRAM REFERENCES               *
  18. ; **********************************************************************
  19.      EXTRN     SCRMGR:NEAR
  20. ; **********************************************************************
  21. ; *              EXTERNAL DATA REFERENCES               *
  22. ; **********************************************************************
  23.      INCLUDE HDDATA.ASM
  24. ; **********************************************************************
  25. ; *            EXTERNAL SUBROUTINE REFERENCES               *
  26. ; **********************************************************************
  27.      INCLUDE HDSUB.ASM
  28. ; **********************************************************************
  29. ; *                PUBLIC DECLARES                   *
  30. ; **********************************************************************
  31.      PUBLIC  HDSHIP
  32. ; **********************************************************************
  33. ; *                 MACROS                    *
  34. ; **********************************************************************
  35.      IF1
  36.      INCLUDE HD.MAC
  37.      INCLUDE \SCRMGR\SCRNWORK.MAC
  38.      ENDIF
  39. ; **********************************************************************
  40. ; *                                       *
  41. ; *                   BEGIN                       *
  42. ; *                                       *
  43. ; **********************************************************************
  44. CSEG     SEGMENT PARA PUBLIC 'CODE'
  45.      ASSUME CS:CSEG
  46. HDSHIP PROC    NEAR
  47.      ASSUME  DS:CSEG           ;DATA SEGMENT
  48.      JMP     BY_ID               ;JMP AROUND ID
  49.      ID     HDSHIP
  50.      INCLUDE \SCRMGR\SCRNWORK.ASM
  51. ; **********************************************************************
  52. ; *             EQUATES AND STRUCTURES                *
  53. ; **********************************************************************
  54.      INCLUDE HDEQU.ASM
  55. ; **********************************************************************
  56. ; *                 SCREENS                   *
  57. ; **********************************************************************
  58.   SFIELD X00,X01,,@LABEL,RV,23,02,'CTRL-F1 TO START'
  59.   SFIELD X01,X02,,@LABEL,RV,23,29,'ESC FOR THE MAIN MENU'
  60.   SFIELD X02,X00,,@LABEL,RV,23,62,'CTRL-BRK TO STOP'
  61. ;
  62.   SFIELD XI0,XI1,,@LABEL,LO,19,15,'DRIVE =>'
  63.   SFIELD XI1,XI2,1,@EX+@NUM+@UC+@NFULL+@REQ,LO,19,24
  64.   SFIELD XI2,XI0,,@LABEL,LO,20,15,'(1 OR 2)'
  65. ;
  66.   SFIELD XS0,XS1,,@LABEL,LO,19,46,'STATUS =>'
  67.   SFIELD XS1,XS0,,@LABEL,LO,19,56,'** IDLE **   '
  68. ;
  69.   SFIELD XS2,XS3,,@LABEL,LO,19,46,'STATUS =>'
  70.   SFIELD XS3,XS2,,@LABEL,HI,19,56,'** WORKING **'
  71. ;
  72.   SFIELD XC0,XC1,,@LABEL,LO,20,46,'CYLINDER =>'
  73.   SFIELD XC1,XC0,04,@LABEL,LO,20,58
  74. ;
  75.   SFIELD XE0,XE1,,@LABEL,LO,21,46,'ERRORS =>'
  76.   SFIELD XE1,XE0,05,@LABEL,LO,21,56
  77. ;
  78.   SFIELD T05,T05,,@LABEL,RV,17,23,'PREPARE FOR RELOCATION'
  79. ;
  80. BY_ID:
  81. HDSHIP ENDP
  82. ; *********************************************************************
  83. ; *                                      *
  84. ; *               LAND THE HEADS                  *
  85. ; *                                      *
  86. ; *********************************************************************
  87. LHDS     PROC
  88.      CLS     LO,4,1,23,78           ;CLEAR THE SCREEN
  89.      BOX     17,0,08,80,LO           ;OUTLINE
  90.      WRITEC  0CCH,LO,17,0,1        ;  THE
  91.      WRITEC  0B9H,LO,17,79,1       ;  SCREEN
  92.      WRITE     T05               ;TYPE OF TEST
  93.      WRITE     X00               ;COMMANDS
  94. LH_00:
  95.      WRITE     XS0               ;STATUS
  96.      LEA     BX,XI1            ;DRIVE ENTRY
  97.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  98.      MOV     [BX].S_DATA,' '       ;CLEAR DRIVE
  99.      WRITE     XI0               ;DRIVE + INTERLEAVE
  100. LH_02:
  101.      READR     BX               ;FETCH DRIVE AND INTERLEAVE
  102.      CALL     TRANS_KEY           ;TRANSLATE THE KEY
  103.      JNC     LH_04               ;SUCESSFULL
  104. LH_03:
  105.      CALL     BEEP               ;RING THE BELL
  106.      JMP     LH_02               ;TRY AGAIN
  107. LH_04:
  108.      CMP     AL,ESC_KEY           ;ESCAPE KEY??
  109.      JNE     LH_05               ;NO
  110.      JMP     EXIT               ;RETURN
  111. LH_05:
  112.      CMP     AL,C_BRK           ;CONTROL BREAK KEY??
  113.      JNE     LH_07               ;NO
  114.      JMP     LHDS               ;YES - START OVER
  115. LH_07:
  116.      CMP     AL,C_F1           ;CTRL_F1??
  117.      JNE     LH_03               ;NO - INVALID KEY
  118.      LEA     BX,XI1            ;DRIVE ENTRY
  119.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  120.      MOV     AL,[BX].S_DATA        ;FETCH DRIVE NUMBER
  121.      CMP     AL,'1'                ;VALID DRIVE??
  122.      JE     LH_08               ;YES
  123.      CMP     AL,'2'                ;VALID DRIVE??
  124.      JE     LH_08               ;YES
  125.      MOV     [BX].S_ATTR,HI        ;HIGHLIGHT IT
  126.      PMSG     22               ;DISPLAY THE MESSAGE
  127.      CALL     BEEP               ;RING THE BELL
  128.      WRITE     XI0               ;DRIVE + INTERLEAVE
  129.      JMP     LH_02               ;TRY AGAIN
  130. LH_08:
  131.      AND     AL,0FH            ;ADJUST
  132.      DEC     AL               ;  DRIVE NUMBER
  133.      CMP     AL,NUM_DR           ;DRIVE INSTALLED
  134.      JB     LH_10               ;YES
  135.      MOV     [BX].S_ATTR,HI        ;HIGHLIGHT IT
  136.      PMSG     21               ;DISPLAY THE MESSAGE
  137.      CALL     BEEP               ;RING THE BELL
  138.      WRITE     XI0               ;DRIVE + INTERLEAVE
  139.      JMP     LH_02               ;TRY AGAIN
  140. LH_10:
  141.      MOV     DR,AL               ;SAVE DRIVE NUMBER
  142.      LEA     BX,XI1            ;DRIVE ENTRY
  143.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  144.      WRITE     XI0               ;DRIVE
  145. LH_20:
  146.      CALL     READ_PARMS           ;FETCH DRIVE PARMS
  147.      MOV     CUR_HD,0           ;INITIALIZE
  148.      MOV     CUR_SEC,1           ; THE
  149.      MOV     CUR_CYL,0           ;  STARTING FIELDS
  150.      MOV     ERR_CNT,0           ;CLEAR THE ERROR COUNT
  151.      MOV     NUM_SEC,1           ;NUMBER OF SECTORS
  152.      CALL     UPD_CYL           ;DISPLAY CYLINDER NUMBER
  153.      CALL     UPD_ERR           ;DISPLAY ERROR COUNT
  154.      WRITE     XS2               ;STATUS
  155.      CLS     LO,4,2,16,78           ;CLEAR THE SCREEN
  156.      CALL     HIDE_CUR           ;HIDE THE CURSOR
  157.      CALL     CTLR_DIAG           ;CTLR HD
  158.      JC     LH_70               ;FAILED
  159. ; *********************************************************************
  160. ; *               BEGIN THE TEST                  *
  161. ; *********************************************************************
  162. LH_40:
  163.      MOV     AH,0BH            ;CHECK FOR
  164.      INT     21H               ;  CONTROL BREAK
  165.      MOV     AX,INT_AREA           ;ESTABLISH
  166.      MOV     ES,AX               ;  SEGMENT
  167.      CMP     DR,00H            ;DRIVE C??
  168.      JNE     LH_50               ;NO
  169.      LES     SI,ES:INT_41           ;FETCH PARM VECTORS
  170.      MOV     AX,WORD PTR ES:[SI+12] ;LANDING ZONE
  171.      JMP     LH_60               ;CONTINUE
  172. LH_50:
  173.      LES     SI,ES:INT_46           ;FETCH PARM VECTORS
  174.      MOV     AX,WORD PTR ES:[SI+12] ;LANDING ZONE
  175. LH_60:
  176.      MOV     CUR_CYL,AX           ;SET CYLINDER
  177.      CALL     UPD_CYL           ;DISPLAY CURRENT CYLINDER
  178.      MOV     HD_CMD,SEEK_CMD       ;SEEK COMMAND
  179.      MOV     NUM_SEC,1           ;NUMBER OF SECTORS
  180.      CALL     EXEC_CMD           ;VERIFY THE SECTOR
  181.      CALL     UPD_ERR           ;DISPLAY ERROR COUNT
  182.      CMP     ERR_CNT,0           ;ANY ERRORS??
  183.      JNE     LH_70               ;YES
  184.      PMSG     37,HI               ;TEST COMPLETE
  185.      PMSG     44,HI               ;  COMPLETE
  186.      JMP     LH_00               ;NEXT
  187. LH_70:
  188.      PMSG     38,HI               ;ERROR MSG
  189.      JMP     LH_00               ;NEXT
  190. ; *********************************************************************
  191. ; *                E X I T                   *
  192. ; *********************************************************************
  193. EXIT:
  194.      RET                   ;RETURN
  195. LHDS     ENDP
  196. ; *********************************************************************
  197. ; *            DISPLAY CURRENT CYLINDER              *
  198. ; *********************************************************************
  199. UPD_CYL  PROC
  200.      PUSHALL
  201.      MOV     AX,CUR_CYL           ;FORMAT
  202.      LEA     BX,XC1            ; CYLINDER
  203.      CALL     CONV_ASCII           ;  DISPLAY
  204.      WRITE     XC0               ;CYLINDER
  205.      POPALL
  206.      RET                   ;RETURN
  207. UPD_CYL  ENDP
  208. ; *********************************************************************
  209. ; *               DISPLAY ERROR COUNT                  *
  210. ; *********************************************************************
  211. UPD_ERR  PROC
  212.      PUSHALL
  213.      XOR     AX,AX               ;CLEAR AX
  214.      MOV     AX,ERR_CNT           ;FORMAT
  215.      LEA     BX,XE1            ; ERROR COUNT
  216.      CALL     CONV_ASCII           ;  DISPLAY
  217.      WRITE     XE0               ;ERROR COUNT
  218.      POPALL
  219.      RET                   ;RETURN
  220. UPD_ERR  ENDP
  221. CSEG     ENDS
  222.      END     HDSHIP
  223.